Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / MicrophoneRecorder.js

Displaying Raw • Download


meshchatx/src/frontend/js/MicrophoneRecorder.js 450ed9e35490702052539e98baa04edaabf876e7 (450ed9e3) Text, 8.03 KB

T8b949e/**
* Records microphone input as 16-bit PCM and returns a WAV Blob.
*
* Produces a self-contained WAV/PCM payload (Float32 samples captured via
* Web Audio, downmixed to mono and quantised to int16) so the backend can
* encode the audio to OGG/Opus using LXST's OpusFileSink without relying
* on ffmpeg or any browser MediaRecorder container output.
*/
Tff7b72import Te6edf3microphoneRecorderWorkletSource Tff7b72from Ta5d6ff"./MicrophoneRecorder.worklet.js?raw"Tb4b4b4;

Tff7b72class Te6edf3MicrophoneRecorder Tb4b4b4{
Tff7b72constructorTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3microphoneMediaStream Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioContext Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3sourceNode Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3processorNode Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3silentGainNode Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3pcmChunks Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3sampleRate Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3channels Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_workletBlobUrl Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}

Te6edf3cleanupMediaStreamTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3microphoneMediaStreamTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3microphoneMediaStreamTb4b4b4.Te6edf3getTracksTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3trackTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3trackTb4b4b4.Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore track stop failures
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3microphoneMediaStream Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}

Te6edf3teardownAudioGraphTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3processorNodeTff7b72?Tb4b4b4.Te6edf3portTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3processorNodeTb4b4b4.Te6edf3portTb4b4b4.Te6edf3onmessage Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3processorNodeTff7b72?Tb4b4b4.Te6edf3disconnectTff7b72?Tb4b4b4.Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore disconnect failures
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3silentGainNodeTff7b72?Tb4b4b4.Te6edf3disconnectTff7b72?Tb4b4b4.Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore disconnect failures
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3sourceNodeTff7b72?Tb4b4b4.Te6edf3disconnectTff7b72?Tb4b4b4.Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore disconnect failures
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_workletBlobUrlTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3URLTb4b4b4.Te6edf3revokeObjectURLTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_workletBlobUrlTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3_workletBlobUrl Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioContext Tff7b72&& Tff7b72typeof Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4.Te6edf3close Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3closeResult Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3closeResult Tff7b72&& Tff7b72typeof Te6edf3closeResultTb4b4b4.Tff7b72catch Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Te6edf3closeResultTb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore close failures
Tb4b4b4}
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3processorNode Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3silentGainNode Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3sourceNode Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3audioContext Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}

Tff7b72async Te6edf3startTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3pcmChunks Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72!Te6edf3navigatorTff7b72?Tb4b4b4.Te6edf3mediaDevices Tff7b72|| Tff7b72typeof Te6edf3navigatorTb4b4b4.Te6edf3mediaDevicesTb4b4b4.Te6edf3getUserMedia Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3AudioContextCtor Tff7b72= Tffa657globalThisTb4b4b4.Te6edf3AudioContext Tff7b72|| Tffa657globalThisTb4b4b4.Te6edf3webkitAudioContextTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3AudioContextCtor Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3microphoneMediaStream Tff7b72= Tff7b72await Te6edf3navigatorTb4b4b4.Te6edf3mediaDevicesTb4b4b4.Te6edf3getUserMediaTb4b4b4(Tb4b4b4{
Te6edf3audioTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3audioContext Tff7b72= Tff7b72new Te6edf3AudioContextCtorTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4.Te6edf3resume Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4.Te6edf3resumeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore resume failures
Tb4b4b4}
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3sampleRate Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4.Te6edf3sampleRate Tff7b72|| T79c0ff48000Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3channels Tff7b72= T79c0ff1Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3sourceNode Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4.Te6edf3createMediaStreamSourceTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3microphoneMediaStreamTb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4.Te6edf3audioWorklet Tff7b72|| Tff7b72typeof Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4.Te6edf3audioWorkletTb4b4b4.Te6edf3addModule Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3cleanupMediaStreamTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3teardownAudioGraphTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3workletBlob Tff7b72= Tff7b72new Te6edf3BlobTb4b4b4(Tb4b4b4[Te6edf3microphoneRecorderWorkletSourceTb4b4b4]Tb4b4b4, Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"application/javascript"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_workletBlobUrl Tff7b72= Te6edf3URLTb4b4b4.Te6edf3createObjectURLTb4b4b4(Te6edf3workletBlobTb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4.Te6edf3audioWorkletTb4b4b4.Te6edf3addModuleTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_workletBlobUrlTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3URLTb4b4b4.Te6edf3revokeObjectURLTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_workletBlobUrlTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3_workletBlobUrl Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"AudioWorklet addModule failed"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3processorNode Tff7b72= Tff7b72new Te6edf3AudioWorkletNodeTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4, Ta5d6ff"microphone-pcm-float"Tb4b4b4, Tb4b4b4{
Te6edf3numberOfInputsTff7b72: T79c0ff1Tb4b4b4,
Te6edf3numberOfOutputsTff7b72: T79c0ff1Tb4b4b4,
Te6edf3channelCountTff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3processorNodeTb4b4b4.Te6edf3portTb4b4b4.Te6edf3onmessage Tff7b72= Tb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3buf Tff7b72= Te6edf3eventTb4b4b4.Te6edf3dataTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3buf Tff7b72|| Tff7b72typeof Te6edf3bufTb4b4b4.Te6edf3byteLength Tff7b72!== Ta5d6ff"number" Tff7b72|| Te6edf3bufTb4b4b4.Te6edf3byteLength Tff7b72=== T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3pcmChunksTb4b4b4.Te6edf3pushTb4b4b4(Tff7b72new Tffa657Float32ArrayTb4b4b4(Te6edf3bufTb4b4b4.Te6edf3sliceTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3sourceNodeTb4b4b4.Te6edf3connectTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3processorNodeTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3silentGainNode Tff7b72= Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4.Te6edf3createGainTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3silentGainNodeTb4b4b4.Te6edf3gainTb4b4b4.Te6edf3value Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3processorNodeTb4b4b4.Te6edf3connectTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3silentGainNodeTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3silentGainNodeTb4b4b4.Te6edf3connectTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4.Te6edf3destinationTb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72typeof Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4.Te6edf3resume Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3audioContextTb4b4b4.Te6edf3resumeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore resume failures
Tb4b4b4}
Tb4b4b4}

Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3cleanupMediaStreamTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3teardownAudioGraphTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72async Te6edf3stopTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3audioContext Tff7b72|| Tff7b72!Tff7b72thisTb4b4b4.Te6edf3processorNodeTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Cannot stop recording before start()"Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3sampleRate Tff7b72= Tff7b72thisTb4b4b4.Te6edf3sampleRateTb4b4b4;
Tff7b72const Te6edf3channels Tff7b72= Tff7b72thisTb4b4b4.Te6edf3channelsTb4b4b4;
Tff7b72const Te6edf3chunks Tff7b72= Tff7b72thisTb4b4b4.Te6edf3pcmChunksTb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3teardownAudioGraphTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3cleanupMediaStreamTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3pcmChunks Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;

Tff7b72const Te6edf3samples Tff7b72= Te6edf3MicrophoneRecorderTb4b4b4.Te6edf3_mergeFloat32ChunksTb4b4b4(Te6edf3chunksTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wav Tff7b72= Te6edf3MicrophoneRecorderTb4b4b4.Te6edf3_encodeWavPcm16Tb4b4b4(Te6edf3samplesTb4b4b4, Te6edf3sampleRateTb4b4b4, Te6edf3channelsTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72new Te6edf3BlobTb4b4b4(Tb4b4b4[Te6edf3wavTb4b4b4]Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"audio/wav" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72static Te6edf3_mergeFloat32ChunksTb4b4b4(Te6edf3chunksTb4b4b4) Tb4b4b4{
Tff7b72let Te6edf3total Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3c Tff7b72of Te6edf3chunksTb4b4b4) Tb4b4b4{
Te6edf3total Tff7b72+= Te6edf3cTb4b4b4.Te6edf3lengthTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3merged Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(Te6edf3totalTb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3offset Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3c Tff7b72of Te6edf3chunksTb4b4b4) Tb4b4b4{
Te6edf3mergedTb4b4b4.Te6edf3setTb4b4b4(Te6edf3cTb4b4b4, Te6edf3offsetTb4b4b4)Tb4b4b4;
Te6edf3offset Tff7b72+= Te6edf3cTb4b4b4.Te6edf3lengthTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3mergedTb4b4b4;
Tb4b4b4}

Tff7b72static Te6edf3_encodeWavPcm16Tb4b4b4(Te6edf3samplesTb4b4b4, Te6edf3sampleRateTb4b4b4, Te6edf3channelsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3dataBytes Tff7b72= Te6edf3samplesTb4b4b4.Te6edf3length Tff7b72* T79c0ff2Tb4b4b4;
Tff7b72const Te6edf3buffer Tff7b72= Tff7b72new Tffa657ArrayBufferTb4b4b4(T79c0ff44 Tff7b72+ Te6edf3dataBytesTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3view Tff7b72= Tff7b72new Tffa657DataViewTb4b4b4(Te6edf3bufferTb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3p Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72const Te6edf3writeString Tff7b72= Tb4b4b4(Te6edf3sTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3sTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Te6edf3viewTb4b4b4.Te6edf3setUint8Tb4b4b4(Te6edf3p Tff7b72+ Te6edf3iTb4b4b4, Te6edf3sTb4b4b4.Te6edf3charCodeAtTb4b4b4(Te6edf3iTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3p Tff7b72+= Te6edf3sTb4b4b4.Te6edf3lengthTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3writeUint32 Tff7b72= Tb4b4b4(Te6edf3nTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3viewTb4b4b4.Te6edf3setUint32Tb4b4b4(Te6edf3pTb4b4b4, Te6edf3nTb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3p Tff7b72+= T79c0ff4Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3writeUint16 Tff7b72= Tb4b4b4(Te6edf3nTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3viewTb4b4b4.Te6edf3setUint16Tb4b4b4(Te6edf3pTb4b4b4, Te6edf3nTb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3p Tff7b72+= T79c0ff2Tb4b4b4;
Tb4b4b4}Tb4b4b4;

Te6edf3writeStringTb4b4b4(Ta5d6ff"RIFF"Tb4b4b4)Tb4b4b4;
Te6edf3writeUint32Tb4b4b4(T79c0ff36 Tff7b72+ Te6edf3dataBytesTb4b4b4)Tb4b4b4;
Te6edf3writeStringTb4b4b4(Ta5d6ff"WAVE"Tb4b4b4)Tb4b4b4;
Te6edf3writeStringTb4b4b4(Ta5d6ff"fmt "Tb4b4b4)Tb4b4b4;
Te6edf3writeUint32Tb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4;
Te6edf3writeUint16Tb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3writeUint16Tb4b4b4(Te6edf3channelsTb4b4b4)Tb4b4b4;
Te6edf3writeUint32Tb4b4b4(Te6edf3sampleRateTb4b4b4)Tb4b4b4;
Te6edf3writeUint32Tb4b4b4(Te6edf3sampleRate Tff7b72* Te6edf3channels Tff7b72* T79c0ff2Tb4b4b4)Tb4b4b4;
Te6edf3writeUint16Tb4b4b4(Te6edf3channels Tff7b72* T79c0ff2Tb4b4b4)Tb4b4b4;
Te6edf3writeUint16Tb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4;
Te6edf3writeStringTb4b4b4(Ta5d6ff"data"Tb4b4b4)Tb4b4b4;
Te6edf3writeUint32Tb4b4b4(Te6edf3dataBytesTb4b4b4)Tb4b4b4;

Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3samplesTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72++Tb4b4b4, Te6edf3p Tff7b72+= T79c0ff2Tb4b4b4) Tb4b4b4{
Tff7b72let Te6edf3s Tff7b72= Te6edf3samplesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3s Tff7b72> T79c0ff1Tb4b4b4) Te6edf3s Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3s Tff7b72< Tff7b72-T79c0ff1Tb4b4b4) Te6edf3s Tff7b72= Tff7b72-T79c0ff1Tb4b4b4;
Te6edf3viewTb4b4b4.Te6edf3setInt16Tb4b4b4(Te6edf3pTb4b4b4, Te6edf3s Tff7b72< T79c0ff0 Tff7b72? Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3s Tff7b72* T79c0ff0x8000Tb4b4b4) Tff7b72: Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3s Tff7b72* T79c0ff0x7fffTb4b4b4)Tb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72return Te6edf3bufferTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72export Tff7b72default Te6edf3MicrophoneRecorderTb4b4b4;


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────